package com.example.client;

import cn.hutool.core.util.ObjectUtil;
import com.example.dto.UserIdsDto;
import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 专门用于feign调用
 * @author itheima
 */
@RestController
@RequestMapping("/userClient")
public class UserClient {
    @Resource
    private UserService userService;

    // 注意：由于我们想用GET请求的方式交互
    // 所以，在传递集合类型参数的时候，最好先转成字符串，再去传递

    // 为什么这个接口要用POST请求呢
    // 因为userIds这个参数可能会很长，如果放在路径上面传参，比较不友好

    // 使用feign发起请求，需要做以下几件事：
    // 1.新建一个interface
    // 2.在请求发起方的入口文件，添加EnableClients注解
    // 3.在请求发起方，注入Client，调用对应的方法
    @PostMapping("/getUsersByIds")
    public List<User> getUsersByIds(@RequestBody UserIdsDto userIdsDto) {
        if (ObjectUtil.isEmpty(userIdsDto)) {
            return null;
        }
        List<User> users = userService.getUsersByIds(userIdsDto.getUserIds());
        if (users == null) {
            return new ArrayList<>();// 通常集合类型飞返回接口, 最好不要返回null,
        }
        return users;
    }
}
